################################################################################ 
#
# The distribution of hate speech and its implications for content moderation
# PSRM - Replication package
# Table E8
#
################################################################################ 


################################################################################ 
#  LIBRARIES
################################################################################ 

library(estimatr)

rm(list = setdiff(ls(), ls(pattern = "^wd|^setsave$")))

################################################################################ 
#   DATA AND FOLDER
################################################################################ 

data = read.csv(paste0(wd_data_processed, '/for_analysis/clean_for_analysis.csv'))
data = data[which(data$attrition==0 & data$not_auth_sofar==0 & data$suspended_sofar==0 & data$protected_sofar==0),]

################################################################################ 
#   VARIABLES as in the PAP
################################################################################

outvars = c('anchor_deleted_12h', 'no_hate_tweets_post_85', 'hate_rate_85', 'post_tweets_h_avg')
outvars_name = c('Hate Tweet Deleted <12h', '# Hate Tweets', 'Share of daily hate', 'Probability of Hate Speech') 

treatments = c('empathy_get', 'empathy_take', 'consequences', 'ban', 'humor')
treatments_lab = c( 'Perspective Getting', 'Perspective Taking',  'Warning of Consequences',
                    'Alerting', 'Humor')


################################################################################ 
#   Scale variables
################################################################################ 

data[c(outvars)] = lapply(data[c(outvars)], scale)

################################################################################ 
#   Run the models on the full time period
################################################################################ 


MODELS = list()

n = 1

for (j in 1:length(outvars)){
  for (i in 1:length(treatments)){
    
    # drop missings
    droper = union(which(is.na(data[outvars[j]])), which(data[outvars[j]]==Inf))
    
    # keep the right treatment and control group
    keeper = union(which(data$treat_label == treatments[i]),  which(data$treat_label == 'control')) 
    keeper = setdiff(keeper, droper)
    
    # select rows
    y = data[keeper, outvars[j]]
    d = data$treated[keeper]

    # regression
    MODELS[[n]] = lm_robust(y ~ d, se_type='HC3')

    print('Done with: ')
    print(n)
    
    n = n+1
    
  }}



################################################################################ 
#   Save results in a container
################################################################################ 


make_container = function(list_to_be_transformed, outvars, outvars_name){
  MOD = list_to_be_transformed
  
  coef = sapply(MOD, function(m) summary(m)$coefficients[2, 1])
  se = sapply(MOD, function(m) summary(m)$coefficients[2, 2])
  pval = sapply(MOD, function(m) summary(m)$coefficients[2, 4])
  sample = sapply(MOD, function(m) summary(m)$n)
  
  container = cbind.data.frame(yvar = rep(outvars, each=length(treatments)),
                               yvar_name = rep(outvars_name, each=length(treatments)),
                               treat = rep(treatments, time=length(outvars)),
                               treatments_lab = rep(treatments_lab, time=length(outvars)),
                               coef = coef, se=se, pval=pval, 
                               samplesize = sample
                               )
  return(container)
  }


container = make_container(MODELS, outvars, outvars_name)
if (setsave){write.csv(container, paste0(wd_res, '/tables/tabE8.csv'), row.names = F)}

cat("\n====================\n")
cat("Saved Table E8")
cat("\n====================\n")
